﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO;
namespace DAO
{
    public class KhuyenMai_DAO
    {
        BanHang_LinQDataContext banHang = new BanHang_LinQDataContext();
        /// <summary>
        /// Lấy tất cả danh sách khuyến mãi
        /// </summary>
        /// <returns></returns>
        public List<KhuyenMai> LayDanhSach_KhuyenMai()
        {
            try
            {
                return banHang.KhuyenMais.Where(km => km.isDelete == 0).ToList();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// Thêm một khuyến mãi mới
        /// </summary>

        public bool Them_KhuyenMai(KhuyenMai khuyenMai)
        {
            try
            {
                banHang.KhuyenMais.InsertOnSubmit(khuyenMai);
                banHang.SubmitChanges();
                return true;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// Phương thức xóa một khuyến mãi
        /// Xóa nhưng thật ra là cập nhật lại IsDelete 
        /// </summary>
        /// <param name="maKhuyenMai"></param>
        public bool Xoa_KhuyenMai(KhuyenMai khuyenmai)
        {
            try
            {
                KhuyenMai khuyenMai = banHang.KhuyenMais.Single(p => p.MaKhuyenMai == khuyenmai.MaKhuyenMai);
                khuyenMai.isDelete = 1;
                banHang.SubmitChanges();
                return true;
            }
            catch (Exception ex)
            {
                return false;
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// Cập nhật lại các giá trị của sản phẩm
        /// </summary>
        /// <param name="maKhuyenMai"></param>
        /// <param name="khuyenMai"></param>
        /// <returns></returns>
        public bool Sua_KhuyenMai(KhuyenMai khuyenMai)
        {
            try
            {
                KhuyenMai spKhuyenMai = banHang.KhuyenMais.Single(p => p.MaKhuyenMai == khuyenMai.MaKhuyenMai);
                spKhuyenMai.MaKhuyenMai = khuyenMai.MaKhuyenMai;
                spKhuyenMai.TenKhuyenMai = khuyenMai.TenKhuyenMai;
                spKhuyenMai.DiemNoiBat = khuyenMai.DiemNoiBat;
                spKhuyenMai.DieuKien = khuyenMai.DieuKien;
                spKhuyenMai.NoiDung = khuyenMai.NoiDung;
                spKhuyenMai.TomTat = khuyenMai.TomTat;
                spKhuyenMai.GiaGoc = khuyenMai.GiaGoc;
                spKhuyenMai.SoLuongToiThieu = khuyenMai.SoLuongToiThieu;
                spKhuyenMai.SoLuongToiDa = khuyenMai.SoLuongToiDa;
                spKhuyenMai.ThoiGianBatDau = khuyenMai.ThoiGianBatDau;
                spKhuyenMai.ThoiGianKetThuc = khuyenMai.ThoiGianKetThuc;
                spKhuyenMai.TongSoNguoiMua = khuyenMai.TongSoNguoiMua;
                spKhuyenMai.MaLoaiKhuyenMai = khuyenMai.MaLoaiKhuyenMai;
                spKhuyenMai.TinhTrang = khuyenMai.TinhTrang;
                spKhuyenMai.MaDoanhNghiep = khuyenMai.MaDoanhNghiep;
                spKhuyenMai.isDelete = khuyenMai.isDelete;
                banHang.SubmitChanges();
                return true;
            }
            catch (Exception ex)
            {
                return false;
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// Lấy danh sách khuyến mãi theo mã loại khuyến mãi
        /// </summary>
        /// <param name="maLoaiKhuyenMai"></param>
        /// <returns></returns>
        public List<KhuyenMai> LayDanhSachTheoLoaiKhuyenMai_KhuyenMai(int maLoaiKhuyenMai)
        {
            try
            {
                //List<KhuyenMai> dsKhuyenMai = new List<KhuyenMai>();
                //var ds = from p in banHang.KhuyenMais
                //         where p.MaLoaiKhuyenMai == maLoaiKhuyenMai
                //         select p;
                //foreach (KhuyenMai khuyenMai in ds)
                //{
                //    dsKhuyenMai.Add(khuyenMai);
                //}
                //return dsKhuyenMai;
                return banHang.KhuyenMais.Where(km => km.MaLoaiKhuyenMai == maLoaiKhuyenMai && km.isDelete == 0).ToList();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// Lấy danh sách khuyến mãi theo mã doah nghiệp
        /// </summary>
        /// <param name="maDoanhNghiep"></param>
        /// <returns></returns>
        public List<KhuyenMai> LayDanhSachTheoMaDoanhNghiep_KhuyenMai(int maDoanhNghiep)
        {
            try
            {
                //List<KhuyenMai> dsKhuyenMai = new List<KhuyenMai>();
                //var ds = from p in banHang.KhuyenMais
                //         where p.MaDoanhNghiep == maDoanhNghiep
                //         select p;
                //foreach (KhuyenMai khuyenMai in ds)
                //{
                //    dsKhuyenMai.Add(khuyenMai);
                //}
                //return dsKhuyenMai;
                return banHang.KhuyenMais.Where(km => km.MaDoanhNghiep == maDoanhNghiep && km.isDelete == 0).ToList();
            }
            catch (Exception ex)
            {
                return null;
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// Lấy danh sách khuyến mãi theo giá sản phẩm
        /// </summary>
        /// <param name="giaKhuyenMai"></param>
        /// <returns></returns>
        public List<KhuyenMai> LayDanhSachTheoGia_KhuyenMai(int giaKhuyenMai)
        {
            try
            {
                List<KhuyenMai> dsKhuyenMai = new List<KhuyenMai>();
                var ds = from p in banHang.KhuyenMais
                         where p.GiaKhuyenMai <= giaKhuyenMai && p.isDelete == 0
                         select p;
                foreach (KhuyenMai khuyenMai in ds)
                {
                    dsKhuyenMai.Add(khuyenMai);
                }
                return dsKhuyenMai;
            }
            catch (Exception ex)
            {
                return null;
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// Lấy danh sách khuyến mãi theo tên khuyến mãi
        /// </summary>
        /// <param name="tenKhuyenMai"></param>
        /// <returns></returns>
        public List<KhuyenMai> LayDanhSachTheoTen_KhuyenMai(string tenKhuyenMai)
        {
            try
            {
                //List<KhuyenMai> dsKhuyenMai = new List<KhuyenMai>();
                //var ds = from p in banHang.KhuyenMais
                //         where p.TenKhuyenMai == tenKhuyenMai
                //         select p;
                //foreach (KhuyenMai khuyenMai in ds)
                //{
                //    dsKhuyenMai.Add(khuyenMai);
                //}
                //return dsKhuyenMai;
                return banHang.KhuyenMais.Where(km => (km.TenKhuyenMai.Contains(tenKhuyenMai)) && km.isDelete == 0).ToList();
            }
            catch (Exception ex)
            {
                return null;
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// Lấy danh sách khuyến mãi theo ngày bất đầu khuyến mãi
        /// </summary>
        /// <param name="ngayBatDau"></param>
        /// <returns></returns>
        public List<KhuyenMai> LayDanhSachTheoNgayBatDau_KhuyenMai(DateTime ngayBatDau)
        {
            try
            {
                List<KhuyenMai> dsKhuyenMai = new List<KhuyenMai>();
                var ds = from p in banHang.KhuyenMais
                         where p.ThoiGianBatDau >= ngayBatDau
                         select p;
                foreach (KhuyenMai khuyenMai in ds)
                {
                    dsKhuyenMai.Add(khuyenMai);
                }
                return dsKhuyenMai;
            }
            catch (Exception ex)
            {
                return null;
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// Lấy danh sách khuyến mãi theo ngày bắt đầu và ngày kết thúc
        /// </summary>
        /// <param name="ngayBatDau"></param>
        /// <param name="ngayKetThuc"></param>
        /// <returns></returns>
        public List<KhuyenMai> LayDanhSachTheoNgayThang_KhuyenMai(DateTime ngayBatDau, DateTime ngayKetThuc)
        {
            try
            {
                List<KhuyenMai> dsKhuyenMai = new List<KhuyenMai>();
                var ds = from p in banHang.KhuyenMais
                         where p.ThoiGianBatDau >= (ngayBatDau)
                               && p.ThoiGianKetThuc <= (ngayKetThuc)
                         select p;
                foreach (KhuyenMai khuyenMai in ds)
                {
                    dsKhuyenMai.Add(khuyenMai);
                }
                return dsKhuyenMai;
            }
            catch (Exception ex)
            {
                return null;
                throw new Exception(ex.Message);
            }
        }
        /// <summary>
        /// Lấy danh sách khuyến mãi theo tình trạng khuyến mãi
        /// </summary>
        /// <param name="tinhTrang"></param>
        /// <returns></returns>
        public List<KhuyenMai> LayDanhSachTheoTinhTrang_KhuyenMai(int tinhTrang)
        {
            try
            {
                //List<KhuyenMai> dsKhuyenMai = new List<KhuyenMai>();
                //var ds = from p in banHang.KhuyenMais
                //         where p.TinhTrang == tinhTrang
                //         select p;
                //foreach (KhuyenMai khuyenMai in ds)
                //{
                //    dsKhuyenMai.Add(khuyenMai);
                //}
                //return dsKhuyenMai;
                return banHang.KhuyenMais.Where(km => km.TinhTrang == tinhTrang && km.isDelete == 0).ToList();
            }
            catch (Exception ex)
            {
                return null;
                throw new Exception(ex.Message);
            }
        }

        //Phần Lực thêm vô, lấy khuyến mãi theo mã khuyến mãi
        public KhuyenMai KhuyenMai_MaKhuyenMai(int maKhuyenMai)
        {
            try
            {
                var khuyenMai = banHang.KhuyenMais.SingleOrDefault(km => km.MaKhuyenMai == maKhuyenMai && km.isDelete == 0);
                return khuyenMai;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }



        //Sanh Thêm Vô
        /// <summary>
        /// Lấy danh sách khuyến mãi theo loại ====== Sanh Cap Nhat
        /// </summary>
        /// <returns></returns>
        public IQueryable LayDanhSachTheoTheLoai(int loai)
        {
            try
            {
                // khai báo cái Loai này mục đích để trả về biến requequet trên GUI

                if (loai == 0)
                {
                    // kết bảng trong linq cái này tui kết 3 bảng KhuyenMai ,KhuyenMai_HinhAnh ,HinhAnh
                    var query = (from km in banHang.KhuyenMais
                                 join kmha in banHang.KhuyenMai_HinhAnhs
                                 on km.MaKhuyenMai equals kmha.MaKhuyenMai
                                 join ha in banHang.HinhAnhs on kmha.MaHinhAnh equals ha.MaHinhAnh
                                 where ha.LoaiHinh == 1
                                 select new
                                 {
                                     // mình muốn lấy cái gì thì lấy hết ở đây cái này tui chỉ lấy bao nhiêu cái đó lên web nên chấm vậy
                                     // nhưng theo tui thì lấy hết mấy cái định danh luôn cho chắt lên GUI mình muốn lấy cái j cũng dc cho dễ
                                     km.MaKhuyenMai,
                                     ha.DuongDan,
                                     km.GiaGoc,
                                     km.GiaKhuyenMai,
                                     km.TongSoNguoiMua,
                                     km.TenKhuyenMai,
                                     km.ThoiGianBatDau,
                                     km.ThoiGianKetThuc,
                                     km.SoLuongToiDa
                                 });
                    return query;
                }
                else
                {
                    var query = (from km in banHang.KhuyenMais
                                 join kmha in banHang.KhuyenMai_HinhAnhs
                                 on km.MaKhuyenMai equals kmha.MaKhuyenMai
                                 where km.MaLoaiKhuyenMai == loai
                                 join ha in banHang.HinhAnhs on kmha.MaHinhAnh equals ha.MaHinhAnh
                                 where ha.LoaiHinh == 1
                                 select new
                                 {
                                     km.MaKhuyenMai,
                                     ha.DuongDan,
                                     km.GiaGoc,
                                     km.GiaKhuyenMai,
                                     km.TongSoNguoiMua,
                                     km.TenKhuyenMai,
                                     km.ThoiGianBatDau,
                                     km.ThoiGianKetThuc,
                                     km.SoLuongToiDa
                                 });
                    return query;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        /// <summary>
        /// Lấy Danh Sách Đã Đăng  == sanh
        /// </summary>
        /// <param name="loai"></param>
        /// <returns></returns>
        public IQueryable LayDanhSachTheoDaDang(int loai)
        {
            try
            {
                if (loai == 0)
                {
                    var query = (from km in banHang.KhuyenMais
                                 join kmha in banHang.KhuyenMai_HinhAnhs
                                 on km.MaKhuyenMai equals kmha.MaKhuyenMai
                                 join ha in banHang.HinhAnhs on kmha.MaHinhAnh equals ha.MaHinhAnh
                                 where ha.LoaiHinh == 1
                                 select new
                                 {
                                     km.MaKhuyenMai,
                                     ha.DuongDan,
                                     km.GiaGoc,
                                     km.GiaKhuyenMai,
                                     km.TongSoNguoiMua,
                                     km.TenKhuyenMai,
                                     km.ThoiGianBatDau,
                                     km.ThoiGianKetThuc,
                                     km.SoLuongToiDa
                                 });
                    return query;
                }
                else
                {
                    var query = (from km in banHang.KhuyenMais
                                 where km.MaKhuyenMai == loai
                                 join kmha in banHang.KhuyenMai_HinhAnhs
                                 on km.MaKhuyenMai equals kmha.MaKhuyenMai
                                 join ha in banHang.HinhAnhs on kmha.MaHinhAnh equals ha.MaHinhAnh
                                 where ha.LoaiHinh == 1
                                 select new
                                 {
                                     km.MaKhuyenMai,
                                     ha.DuongDan,
                                     km.GiaGoc,
                                     km.GiaKhuyenMai,
                                     km.TongSoNguoiMua,
                                     km.TenKhuyenMai,
                                     km.ThoiGianBatDau,
                                     km.ThoiGianKetThuc,
                                     km.SoLuongToiDa
                                 });
                    return query;
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
    }
}
